package sparkcore.day7.lesson03

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{DataFrame, SQLContext, SaveMode}

/**
  * Created by Administrator on 2018/5/3.
  */
object ReadAndSave {
  def main(args: Array[String]): Unit = {
    /**
      * 创建SparkSQl的程序入口
      */
    val conf = new SparkConf().setMaster("local").setAppName("test")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    /**
      * 加载数据
      * 数据源：
      *   1）Hive里面的表（重点）
      *   2）关系新数据库里面的表（重要！！）
      *   3）结构化文件的：
      *      json
      *   4）已经存在的RDD（讲过了）
      *   5）Parquet文件格式的数据（sparkSQL对这个文件格式支持得很好）
      */
      //方式一
    val df1: DataFrame = sqlContext.read.json("D:\\1711班\\第十三天\\资料\\resources\\people.json")
    val df1s: DataFrame = sqlContext.read.parquet("D:\\1711班\\第十三天\\资料\\resources\\users.parquet")
    //sqlContext.read.jdbc("xxxx")
    //方式二
    val df2: DataFrame  = sqlContext.read.format("json").load("D:\\1711班\\第十三天\\资料\\resources\\people.json")
    val df2s: DataFrame = sqlContext.read.format("parquet").load("D:\\1711班\\第十三天\\资料\\resources\\users.parquet")
    //sqlContext.read.format("jdbc").load()
    //方式三 如果什么文件格式都不指定，默认支持的是parquet文件格式
    sqlContext.load("D:\\1711班\\第十三天\\资料\\resources\\users.parquet")

    /**
      * 写数据
      */
    //方式一
    df2.write.json("")
    df2.write.parquet("")
    //df2.write.jdbc()
    //方式二
    df2.write.format("json").save("hdfs://hadoop1:9000/result")
    df2.write.format("parquet").mode(SaveMode.Ignore).save("xxxxxx")
    //df2.write.format("jdbc").option()
    //方式三
    /**
      * 如果写数据的时候不指定文件格式，那么默认就是parquet文件格式
      */
    df2.write.save("xxxxxxxx")

    /***
      * 面试题：
      * 现在在我们HDFS文件系统上面 存了一个文件，该文件格式是 .txt文件格式
      * 要求把这个文件格式转换成为parquet文件格式
      *
      * 思路：
      * 1）先读取文件生成一个RDD
      * 2）把RDD转换成为一个DataFrame
      *     RDD[Person].toDF
      * 3) 写数据，指定文件格式就可以了！！
      *
      * CREATE TABLE IF NOT EXISTS
      */





  }

}
